/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Dao;

import Beans.ClienteBean;
import Conexion.Conexion;
import java.sql.ResultSet;
import java.util.Vector;

/**
 *
 * @author acorzo
 */
public class ClienteDAO {

    // Atributos de la Clase
    public static String INSERT_DATOS_CLIENTE="INSERT INTO cat_clientes (codigoCliente,razonSocial,nombreCliente,rfc,direccion,noInt,noExt,codigoPostal,idEntidad,email,limiteCredito,diasCredito,fechaVencimiento,fechaAlta,idEstado) VALUES ";
    public static String GET_ID_CLIENTE="SELECT auto_increment FROM information_schema.tables WHERE table_schema='bd_pegaso' AND table_name='cat_clientes';";
    public static String GET_DATOS_CLIENTES="SELECT codigoCliente,nombreCliente,rfc,limiteCredito,fechaVencimiento,idCliente FROM cat_clientes WHERE idEstado=1 AND idCliente <> 1;";
    public static String GET_DATOS_CLIENTES_NOMBRE_CODIGO="SELECT codigoCliente,nombreCliente,idCliente FROM cat_clientes WHERE idEstado=1";
    public static String GET_DATOS_CLIENTE="SELECT codigoCliente,razonSocial,nombreCliente,rfc,direccion,noInt,noExt,codigoPostal,idEntidad,email,limiteCredito,diasCredito,fechaVencimiento,idCliente FROM cat_clientes WHERE idCliente=";
    public static String UPDATE_DATOS_CLIENTE="UPDATE cat_clientes SET";
    public static String DELETE_DATOS_CLIENTE="UPDATE cat_clientes SET idEstado=2 WHERE ";
    public static String GET_DATOS_CLIENTES_ACTIVOS="SELECT codigoCliente,nombreCliente,rfc,limiteCredito,fechaVencimiento,idCliente FROM cat_clientes WHERE ";
    public static String GET;

    // Metodos Publicos
    // Insertamos los Datos del Cliente
    public Vector insertaDatosCliente(ClienteBean clienteBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Insertamos los Datos del Cliente
        try {
            conect.getPreparedStatement().execute(INSERT_DATOS_CLIENTE+
                    "('"+clienteBean.getCodigoCliente()+"'"+
                    ",'"+clienteBean.getRazonSocial()+"'"+
                    ",'"+clienteBean.getNombreCliente()+"'"+
                    ",'"+clienteBean.getRfc()+"'"+
                    ",'"+clienteBean.getDireccion()+"'"+
                    ",'"+clienteBean.getNoInt()+"'"+
                    ",'"+clienteBean.getNoExt()+"'"+
                    ",'"+clienteBean.getCodigoPostal()+"'"+
                    ","+clienteBean.getIdEntidad()+
                    ",'"+clienteBean.getEmail()+"'"+
                    ","+clienteBean.getLimiteCredito()+
                    ","+clienteBean.getDiasCredito()+
                    ",'"+clienteBean.getFechaVencimiento()+"'"+
                    ",NOW()"+
                    ",1);");
            resultDatos.add("OK");
        } catch (Exception e) {
            resultDatos.add("ERROR");
            // Mensaje en Consola
            System.out.println("ERROR :" + e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Actualizamos los Datos del Cliente
    public Vector updateDatosCliente(ClienteBean clienteBean,Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Actualizamos los Datos del Cliente
        try {
            conect.getPreparedStatement().execute(UPDATE_DATOS_CLIENTE+
                    " codigoCliente='"+clienteBean.getCodigoCliente()+"'"+
                    ",razonSocial='"+clienteBean.getRazonSocial()+"'"+
                    ",nombreCliente='"+clienteBean.getNombreCliente()+"'"+
                    ",rfc='"+clienteBean.getRfc()+"'"+
                    ",direccion='"+clienteBean.getDireccion()+"'"+
                    ",noInt='"+clienteBean.getNoInt()+"'"+
                    ",noExt='"+clienteBean.getNoExt()+"'"+
                    ",codigoPostal='"+clienteBean.getCodigoPostal()+"'"+
                    ",idEntidad="+clienteBean.getIdEntidad()+
                    ",email='"+clienteBean.getEmail()+"'"+
                    ",limiteCredito="+clienteBean.getLimiteCredito()+
                    ",diasCredito="+clienteBean.getDiasCredito()+
                    ",fechaVencimiento='"+clienteBean.getFechaVencimiento()+"'"+
                    ",fechaModificacion=NOW() WHERE idCliente="+clienteBean.getIdCliente());
            resultDatos.add("OK");
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR : "+ e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos el Proximo Identificador del Cliente
    public Vector getIdCliente(ClienteBean clienteBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Obtenemos el Identificador del Cliente
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_ID_CLIENTE);
            while(resultSet.next()){
                ClienteBean getIdCliente=new ClienteBean();
                getIdCliente.setIdCliente(resultSet.getString("auto_increment"));
                resultDatos.add(getIdCliente);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :" + e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Eliminamos los Datos del Cliente (Logica)
    public Vector deleteDatosCliente(ClienteBean clienteBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Eliminamos los Datos del Cliente
        try {
            conect.getPreparedStatement().execute(DELETE_DATOS_CLIENTE+
                    "idCliente="+clienteBean.getIdCliente());
            resultDatos.add("OK");
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+ e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos Datos de Clientes
    public Vector getDatosClientes(ClienteBean clienteBean,Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Obtenemos los Datos de Clientes
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_CLIENTES);
            while(resultSet.next()){
                ClienteBean getDatosClientes=new ClienteBean();
                getDatosClientes.setCodigoCliente(resultSet.getString("codigoCliente"));
                getDatosClientes.setNombreCliente(resultSet.getString("nombreCliente"));
                getDatosClientes.setRfc(resultSet.getString("rfc"));
                getDatosClientes.setLimiteCredito(resultSet.getString("limiteCredito"));
                getDatosClientes.setFechaVencimiento(resultSet.getString("fechaVencimiento"));
                getDatosClientes.setIdCliente(resultSet.getString("idCliente"));
                resultDatos.add(getDatosClientes);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :" + e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos Datos Cliente
    public Vector getDatosCliente(ClienteBean clienteBean,Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Obtenemos Datos Cliente
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_CLIENTE+clienteBean.getIdCliente());
            while(resultSet.next()){
                ClienteBean getDatosCliente=new ClienteBean();
                getDatosCliente.setCodigoCliente(resultSet.getString("codigoCliente"));
                getDatosCliente.setRazonSocial(resultSet.getString("razonSocial"));
                getDatosCliente.setNombreCliente(resultSet.getString("nombreCliente"));
                getDatosCliente.setRfc(resultSet.getString("rfc"));
                getDatosCliente.setDireccion(resultSet.getString("direccion"));
                getDatosCliente.setNoInt(resultSet.getString("noInt"));
                getDatosCliente.setNoExt(resultSet.getString("noExt"));
                getDatosCliente.setCodigoPostal(resultSet.getString("codigoPostal"));
                getDatosCliente.setIdEntidad(resultSet.getString("idEntidad"));
                getDatosCliente.setEmail(resultSet.getString("email"));
                getDatosCliente.setLimiteCredito(resultSet.getString("limiteCredito"));
                getDatosCliente.setDiasCredito(resultSet.getString("diasCredito"));
                getDatosCliente.setFechaVencimiento(resultSet.getString("fechaVencimiento"));
                getDatosCliente.setIdCliente(resultSet.getString("idCliente"));
                resultDatos.add(getDatosCliente);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :" + e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Busqueda de Clientes Registrados con Estatus Activo (1)
    public Vector buscarDatosClienteActivo(ClienteBean clienteBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Buscamos los Clientes Registrados
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_CLIENTES_ACTIVOS+
                    "DATE(fechaAlta) BETWEEN '"+clienteBean.getFechaInicial()+"' AND '"+clienteBean.getFechaFinal()+"' AND razonSocial LIKE '%"+clienteBean.getRazonSocial()+"%' AND nombreCliente LIKE '%"+clienteBean.getNombreCliente()+"%'");
            System.out.println(GET_DATOS_CLIENTES_ACTIVOS+
                    "DATE(fechaAlta) BETWEEN '"+clienteBean.getFechaInicial()+"' AND '"+clienteBean.getFechaFinal()+"' AND razonSocial LIKE '%"+clienteBean.getRazonSocial()+"%' AND nombreCliente LIKE '%"+clienteBean.getNombreCliente()+"%'");
            while(resultSet.next()){
                ClienteBean getDatosClientesActivos=new ClienteBean();
                getDatosClientesActivos.setCodigoCliente(resultSet.getString("codigoCliente"));
                getDatosClientesActivos.setNombreCliente(resultSet.getString("nombreCliente"));
                getDatosClientesActivos.setRfc(resultSet.getString("rfc"));
                getDatosClientesActivos.setLimiteCredito(resultSet.getString("limiteCredito"));
                getDatosClientesActivos.setFechaVencimiento(resultSet.getString("fechaVencimiento"));
                getDatosClientesActivos.setIdCliente(resultSet.getString("idCLiente"));
                resultDatos.add(getDatosClientesActivos);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+ e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos Datos Clientes por Nombre o Codigo
    public Vector getDatosClientesByCodigoNombre(ClienteBean clienteBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();
        String filtro="";

        // Evaluamos el Filtro
        // Nombre Cliente
        if (!clienteBean.getNombreCliente().equalsIgnoreCase("")){
            // Vaciamos el Filtro
            filtro=filtro+" AND nombreCliente LIKE '%"+clienteBean.getNombreCliente()+"%'";
        }

        // Codigo Cliente
        if (!clienteBean.getCodigoCliente().equalsIgnoreCase("")){
            // Vaciamos el Filtro
            filtro=filtro+" AND codigoCliente LIKE '%"+clienteBean.getCodigoCliente()+"%'";
        }

        // Obtenemos Datos de Clientes por Nombre o Codigo
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_CLIENTES_NOMBRE_CODIGO+filtro);
            while(resultSet.next()){
                ClienteBean getDatosClientes=new ClienteBean();
                getDatosClientes.setCodigoCliente(resultSet.getString("codigoCliente"));
                getDatosClientes.setNombreCliente(resultSet.getString("nombreCliente"));
                getDatosClientes.setIdCliente(resultSet.getString("idCliente"));
                resultDatos.add(getDatosClientes);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }
}
